// MyThreadWalkthroughApp.cpp : main project file.

#include "stdafx.h"

using namespace System;
using namespace System::Threading;

public ref class ServerClass
{
public:
	// The method that will be called when the thread is started. 
	void InstanceMethod()
	{
		Console::WriteLine(
			"ServerClass.InstanceMethod is running on another thread.");

		// Pause for a moment to provide a delay to make 
		// threads more apparent.
		Thread::Sleep(3000);
		Console::WriteLine(
			"The instance method called by the worker thread has ended.");
	}

	static void StaticMethod()
	{
		Console::WriteLine(
			"ServerClass.StaticMethod is running on another thread.");

		// Pause for a moment to provide a delay to make 
		// threads more apparent.
		Thread::Sleep(5000);
		Console::WriteLine(
			"The static method called by the worker thread has ended.");
	}
};

public ref class Simple
{
public:
	static void Main()
	{
		Console::WriteLine("Thread Simple Sample");

		ServerClass^ serverObject = gcnew ServerClass();

		// Create the thread object, passing in the 
		// serverObject.InstanceMethod method using a 
		// ThreadStart delegate.
		Thread^ InstanceCaller = gcnew Thread(
			gcnew ThreadStart(serverObject, &ServerClass::InstanceMethod));

		// Start the thread.
		InstanceCaller->Start();

		Console::WriteLine("The Main() thread calls this after "
			+ "starting the new InstanceCaller thread.");

		// Create the thread object, passing in the 
		// serverObject.StaticMethod method using a 
		// ThreadStart delegate.
		Thread^ StaticCaller = gcnew Thread(
			gcnew ThreadStart(&ServerClass::StaticMethod));

		// Start the thread.
		StaticCaller->Start();

		Console::WriteLine("The Main() thread calls this after "
			+ "starting the new StaticCaller thread.");
	}
};

int main()
{
	Simple::Main();
}